This invention is in the field of data transfer in digital computers that perform scalar and vector operations. More specifically, the invention concerns such a computer in which data transfer is conducted on a bidirectional databus that transports vector and scalar data objects between functional units that perform vector and scalar operations and a buffer unit that has scalar and vector registers for temporary storage of scalar and vector data objects being used or produced by the functional units. The invention concerns increasing the efficiency of use of such a databus by linking a scalar data object being produced by a functional unit from a result to an operand data path in the databus upon the condition that the scalar data object is to be immediately used by a functional unit in the performance of an operation.
A particular architecture for a computer which performs scalar and vector operations is disclosed in U.S. Pat. No. 4,128,880 of Cray, Jr. In that architecture, functional units which perform arithmetic and logic operations are connected to respective banks of scalar and vector registers. The register banks are functionally and architecturally located between a computer main memory and the functional units. The registers are provided for the purpose of temporary storage of vector data objects which have been produced as results by the functional units or which are to be used as operands by the functional units. The registers provide immediately addressable storage for data objects. In this regard, a data object is a binary entity comprising one or more elements. A scalar data object is an entity having a single element; a vector data object is an entity having an ordered set of two or more elements. When understood in the context of computer-implemented functions, a data object can be either an operand or a result. Here, an operand is a data object to which a functional operation is applied or which is operated upon by a functional unit, while a result is the data object which is the product of the performance of an operation. Further, scalar data objects may be either scalar operands or scalar results, while vector data objects may be vector operands or vector results.
For efficient vector operations, the technique of vector "chaining" is known. In vector chaining, the concept of single instruction, multiple data streams (SIMD) is implicit. In SIMD machines, instructions are issued one at a time conditioned upon the availability of resources required to execute them. Thus, there is a "single instruction" bottleneck. However, an instruction may be issued before a previously-issued instruction has completed executing, which means that separate data streams are maintained during the execution of each instruction. Vector chaining is based on the realization that the execution of an instruction being issued may depend upon the result of a still-executing, previously-issued instruction. Thus, for example, a vector instruction which adds two operands to produce a result may use, as one operand, the result of a currently-executing instruction.
In vector chaining, a vector operand is read, element-by-element, from a vector register into which a vector result is being concurrently written, also element-by-element. In order to preserve the integrity of the vector data, the control mechanization of the computer disclosed in U.S. Pat. No. 4,128,880 imposes the condition that the vector result be entered into the commonly-used vector register synchronously with, but ahead of, the extraction of the vector operand from the register. This ensures that the vector operand comprises fresh, reliable data.
Thus, vector chaining enhances vector processing operations by permitting concurrent use of a single resource (a vector register) by concurrently-executing instructions: the subsequent instruction can thus issue without waiting for the concurrently-used register to be completely filled and surrendered by the previously-issued instruction.
The efficiency of scalar operations cannot be enhanced by a technique corresponding to vector chaining. Since scalar operations utilize and produce single-element data objects, a scalar operation which is to utilize, as an operand, a result produced by a previously-issued, concurrently-executing scalar instruction must wait until the result is entered into a scalar register. Thus, a scalar instruction whose execution depends upon a scalar result produced by a previously-issued, currently-executing instruction will not be issued until the previous instruction has completed execution. In the context of the control mechanization described by U.S. Pat. No. 4,128,880, the current scalar instruction will be withheld from issue pending surrender of control over the scalar register into which the currently-executing instruction will enter its result.